/*
 * Copyright 2025 KylinSoft Co., Ltd.
 *
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <https://www.gnu.org/licenses/>.
 */

import QtQml 2.15
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import org.ukui.quick.items 1.0 as UkuiItems
import org.ukui.quick.platform 1.0

Item {
    id: layoutComboBox

    property alias labelText: label.text
    property int itemIndex: -1
    property bool enableBackground: true
    property alias currentIndex: comboBox.currentIndex
    property alias texts: comboBox.model
    property int borderWidth: 1

    signal comboBoxIndexChanged(int comboBoxIndex, int itemIndex)

    Component.onCompleted: {
    }

    UkuiItems.StyleBackground {
        anchors.fill: parent
        useStyleTransparency: false
        visible: enableBackground
    }

    RowLayout {
        spacing: 0
        anchors.fill: parent

        UkuiItems.StyleText {
            id: label

            Layout.alignment: Qt.AlignLeft
            Layout.leftMargin: 24
            Layout.fillWidth: true
        }

        Item {
            Layout.fillWidth: true
        }

        ComboBox {
            id: comboBox

            Layout.alignment: Qt.AlignRight
            Layout.rightMargin: 24
            width: 240
            hoverEnabled: true
            textRole: "name"
            onCurrentIndexChanged: {
                if (currentIndex === 0)
                    return ;

                comboBoxIndexChanged(currentIndex, itemIndex);
            }

            background: Rectangle {
                implicitWidth: 240
                implicitHeight: 36
                radius: 6
                border.color: comboBox.down ? Theme.highlight() : "transparent"
                border.width: borderWidth
                color: {
                    if (comboBox.hovered)
                        return Theme.midLight();
                    else if (comboBox.down)
                        return Theme.button();
                    else
                        return Theme.button();
                }

                Behavior on color {
                    ColorAnimation {
                        duration: 150
                    }

                }

            }

            indicator: UkuiItems.Icon {
                anchors.right: parent.right
                anchors.rightMargin: 8
                anchors.verticalCenter: parent.verticalCenter
                width: 16
                height: 16
                source: "ukui-down-symbolic"
                mode: UkuiItems.Icon.AutoHighlight
            }

            popup: Popup {
                width: comboBox.width
                implicitHeight: contentItem.implicitHeight
                padding: 1

                background:  UkuiItems.Background {
                    radius: 6
                    layer.enabled: true
                    border.color: Qt.rgba(0, 0, 0, 0.1)
                    border.width: borderWidth
                    color: Theme.base()
                    Theme.onPaletteChanged: {
                        color = Theme.base();
                    }
                }

                contentItem: ListView {
                    clip: true
                    implicitHeight: contentHeight
                    model: comboBox.popup.visible ? comboBox.delegateModel : null
                    boundsBehavior: Flickable.StopAtBounds

                    ScrollBar.vertical: ScrollBar {
                        width: 6
                    }

                }

            }

            delegate: ItemDelegate {
                width: comboBox.width
                height: 36
                hoverEnabled: true

                background: Rectangle {
                    color: {
                        if (highlighted)
                            return Theme.button();
                        else if (hovered)
                            return Theme.midLight();
                        else
                            return "transparent";
                    }
                }

                contentItem: UkuiItems.StyleText {
                    text: model.name
                    verticalAlignment: Text.AlignVCenter
                    leftPadding: 8
                }

            }

        }

    }

}
